/*
Backbones-Selector: Select a most probably group of Protein Structures for an Aminoacid Sequence.
    Copyright (C) 2010  Jorge E. A. Atala
                        FuDePAN
    This file is part of the Backbones-Selector Proyect.

    Backbones-Selector is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    Backbones-Selector is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with Backbones-Selector.  If not, see <http://www.gnu.org/licenses/>.
*/

#ifndef BACKBONES_SELECTOR_H
#define BACKBONES_SELECTOR_H



#include <vector>
#include <string>
#include <algorithm>
#include <cmath>
#include "backbones-selector/common/utilsBBSel.h"
#include "backbones-selector/common/protein.h"
#include "backbones-selector/common/energyTable.h"

using mili::Ranker;

namespace backbonesSelector
{

typedef Ranker<ProteinWithEnergy*, mili::AddBeforeEqual, ProteinRanking, mili::DisposalDeletePolicy<ProteinWithEnergy*> > Ranking;
template < class Energy = float, class Distance = float >
class Selector
{
private:

    const EnergyTable<Energy, Distance>& energyTable;
    Ranking& proteinRanker;
    const AminoacidSequence& aminoacids;
public:

    Selector(const EnergyTable<Energy, Distance>& table, Ranking& _proteinRanker, const AminoacidSequence& _aminoacids);
    inline void addStructure(const Structure< >& newStructure);
};

}

#define BACKBONES_SELECTOR_IMP
#include "backbones-selector_imp.h"
#undef BACKBONES_SELECTOR_IMP

#endif

